#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    // step 1# 读取输入的数据 : 分别存放猜测和反馈
    int n;
    scanf("%d", &n);
    char guessAndResult[n][2][5];
    for(int i = 0; i < n; i++) {
        char guess[5];
        char result[5];
        scanf("%s %s", guess, result);
        strcpy(guessAndResult[i][0], guess);
        strcpy(guessAndResult[i][1], result);
    }
    // step 2# 一层 for 遍历 0 - 9999 的每个数字
    char curAnswer[5]; // 用来记录当前的 num 答案
    int isValid;
    int validCount = 0;
    char finalAnswer[5]; // 用来存放可能的答案
    for(int num = 0; num <= 9999; num++) {
        // error 1# isValid 没有在每个 num 前重新初始化
        isValid = 1;
        // error 2# "%04d" 而不是 "%04s"
        sprintf(curAnswer, "%04d", num);
        // step 3# 一层 for 把每个猜测和当前数字对比，并计算反馈
        for(int j = 0; j < n; j++) {
            char *guess = guessAndResult[j][0];
            char *expectResult = guessAndResult[j][1];
            int countA = 0;
            int countB = 0;
            // error 3# answerArr 和 guessArr 没有初始化为 0
            char answerArr[10] = {0};
            char guessArr[10] = {0};
            // step 3.1# 反馈 A 的计算：对应位置相等时才 ++
            for(int i = 0; i < 4; i++) {
                int answerInt = curAnswer[i] - '0';
                int guessInt = guess[i] - '0';
                if (answerInt == guessInt) {
                    countA ++;
                }
                else {
                    answerArr[answerInt]++;
                    guessArr[guessInt]++;
                }
            }
            // step 3.2# 反馈 B 的计算：把位置不对应的数字取交集
            // error 4# 求交集时出错，因为数字可能不止出现一次
            // 不应该是 answerArr[i] == guessArr[i] 时 countB++
            // 而应该是 countB 加上两者中的小者
            for(int i = 0; i < 10; i++) {
                countB += (answerArr[i] < guessArr[i] ? answerArr[i] : guessArr[i]);
            }
            // step 4# 比较当前数字的反馈和期望的反馈,如果有一次不匹配，则该数字不是答案
            char curResult[5]; // 存放当前数字的反馈结果
            sprintf(curResult, "%dA%dB", countA, countB);
            if (strcmp(expectResult, curResult) != 0) {
                isValid = 0;
                break;
            }
        }
        // step 5# 如果与期望反馈都匹配，则记录当前答案并且记录可能的答案个数+1
        if (isValid) {
            strcpy(finalAnswer, curAnswer);
            validCount++;
        }
        // step 6# 如果可能的答案不止一个，则不确定
        if (validCount > 1) {
            printf("NA");
            break;
        }
    }
    if (validCount == 1) {
        printf("%s", finalAnswer);
    }
    else printf("NA");

    return 0;
}